/**
 * @PROJECT_NAME: design_patterns
 * @DESCRIPTION: 外观模式 Facade Pattern
 * 定义：外观模式又叫门面模式，是一种通过多个复杂的子系统提供一个一致的接口，而使这些子系统更加容易被访问的模式，该模式对外观有一个统一接口
 * 外部应用程序不用关心内部子系统的具体的细节，这样会大大降低应用程序的复杂程度，提高了程序的可维护性。
 * <p>
 * 外观模式是迪米特法则的典型应用（最少知识原则）
 * <p>
 * 结构：
 * <p>
 * 外观角色（Facade）：为多个子系统对外观提供一个共同的接口。
 * <p>
 * 子系统角色(Sub system)：实现系统的部分功能，客户可以通过外观角色访问它。
 * <p>
 * 案例：智能家居控制
 * 智能家电都有开与关的功能，如果每次都由人挨个控制，势必使用麻烦而且也就不智能了，通过外观角色进行统一的访问，或者通过语音控制访问，那就大大提高了使用的便利性。
 * <p>
 * 优点：
 * <p>
 * 降低了子系统与客户端之间的耦合度，使得子系统的变化不会影响调用它的客户类。
 * <p>
 * 对客户屏蔽了子系统组件，减少了客户处理的对象数目，并使得子系统使用起来更加容易。
 * <p>
 * 缺点：不符合开闭原则，子系统发生变化后，可能要修改外观角色，此时修改就会很麻烦。
 * <p>
 * 使用场景：
 * <p>
 * 对分层结构系统构建时，使用外观模式定义了系统中每层的入口点可以简化子系统之间的依赖关系，
 * <p>
 * 当一个复杂的系统的子系统很多时，外观模式可以为系统设计一个简单的接口供外界访问。
 * <p>
 * 当客户端与多个子系统之间存在很大的联系时，引入外观模式可将他们分离，从而提高子系统的独立性与可移植性
 * @AUTHOR: CNBruceLee
 * @DATE: 2021/7/28 6:48
 */
package com.bruce.demo2.patterns.demo2.structural.demo10.facade;
